<?php

if(!isset($ruta_raiz))
	$ruta_raiz="../../";
elseif(! strpos($ruta_raiz,"/") && $ruta_raiz )
 	$ruta_raiz.="/";
require_once($ruta_raiz."include/db/ConnectionHandler.php");
require_once($ruta_raiz."include/tx/Tx.php");
require_once($ruta_raiz."include/tx/Historico.php" );
/**
 * ****************************************************************
 * funciones Auxiliares para los servicios Web Test1.0 
 * migrar a Objetos lo mas pronto Posible ojala en MVC
 * recomendacion by Aquiles Canto 
 * enero 10 -2008
 */

/**
 * Realiza una tranzaccion por Visto Bueno 
 *
 * @param String $idUsuario login del Usuario
 * @param String $comentario comentario para la revision del Documento
 * @param int $radicado nukero de radicado con el cual se realizara la transaccion
 * @param int  $codTx codigo de la transaccion
 * @param int $carp_codi codigo de la carpeta de destino
 * @return String
 */


$db= new ConnectionHandler($ruta_raiz);

function txVistoBueno($idUsuario,$comentario,$radicado,$codTx=16,$carp_codi=11){
	global $db;
	
	$idUsuario=($idUsuario=="manager")?"ADMON":$idUsuario;
	$salida=verificarTipificacion($radicado);
	if($salida!==false){
		throw new Exception("Falta por tipificar los siguientes Documentos {$salida}");
	}
	
	$dependencia=getUsuaDependencia($idUsuario);
	if(!esJefe($idUsuario)){
		$depsel=$dependencia;
	}else{
		$depePadre=buscarDepePadre($dependencia);
		$depsel=($depePadre)?$depePadre:$dependencia;
	}
	
	
	$codusuario=getUsuaCodigo($idUsuario);
	$usCodSelect = 1;
	$tranDocumento = new Tx($db);
	$usCodDestino = $tranDocumento->reasignar( array($radicado),$idUsuario,$depsel,$dependencia,$usCodSelect, 
						$codusuario,"si",$comentario,$codTx,$carp_codi);
	return getLoginTx($usCodDestino,$depsel);
}

function txDevolver($idUsuario,$comentario,$radicado,$codTx=16){
	
}




/**
 * retorna el codigo de la dependencia de un usario dado por su pk
 *
 * @param String $usuaLogin
 * @return int
 */
function getUsuaDependencia($usuaLogin){
	global $db;
	$salida=999;
	$sql="SELECT DEPE_CODI FROM USUARIO 
			WHERE  USUA_LOGIN='{$usuaLogin}'";
	$rs= &$db->query($sql);
		if($rs&& !$rs->EOF){
			$salida =($rs->fields["DEPE_CODI"]);
		}
	return $salida;
}
/**
 * dado el codigo de una dependencia Bùsca el codigo de la dependencia a la 
 * cual se encuentra adscrita
 *
 * @param unknown_type $dependencia
 * @return unknown
 */
function buscarDepePadre($dependencia){
	global $db;
	$salida=null;
	$isql="SELECT DEPE_CODI_PADRE FROM DEPENDENCIA WHERE DEPE_CODI={$dependencia}";
	$rs= &$db->query($isql);
		if($rs&& !$rs->EOF){
			$salida = $rs->fields["DEPE_CODI_PADRE"];
		}
	return $salida;
}
/**
 * funcion que verifica que los anexos de un radicado se encuentren tipificados
 * retorna un boolean indicando si tiene problemas de radicacion.
 *
 * @param int $radicado numero de identificacion del documento
 * @return boolean
 */
function verificarTipificacionAnexos($radicado){
	global $db;	
	$salida=false;	
		$isqlTRDA = "
					SELECT RADI_NUME_SALIDA from anexos a
					LEFT join SGD_RDF_RETDOCF rt on a.RADI_NUME_SALIDA=rt.RADI_NUME_RADI
					where ANEX_RADI_NUME = {$radicado} and RADI_NUME_SALIDA <> 0
					and rt.RADI_NUME_RADI is null";
		$rsTRDA = $db->query($isqlTRDA);
		while($rsTRDA && !$rsTRDA->EOF){
			$radiNumero = $rsTRDA->fields["RADI_NUME_SALIDA"];
			$anoRadsal=substr($radiNumero,0,4);
			if ($anoRadsal > "2005")
				$salida.=",".$radiNumero;
			$rsTRDA->MoveNext();
		}
	return $salida;	
}
/**
 * funcion que verifica que un documento se encuentren tipificado
 * retorna un boolean indicando si tiene problemas de radicacion.
 *
 * @param int $radicado numero de identificacion del documento
 * @return boolean
 */
function verificarTipificacion($radicado){
	global $db;
	$salida=$radicado;
	$isqlTRDP = "select radi_nume_radi from SGD_RDF_RETDOCF r where r.RADI_NUME_RADI = $radicado";
	$rsTRDP = $db->query($isqlTRDP);
	while(!$rsTRDP->EOF){
		 $salida=false;
		 $rsTRDP->MoveNext();
	}
	if(!$salida)
		$salida= verificarTipificacionAnexos($radicado);
	return  $salida;
}

/**
 * **************************************************************************************
 * 
 * Usuario
 * 
 * **************************************************************************************
 */

/**
 * devuelve un boolean indicando si es jefe o no .
 *
 * @param string $usaLogin pk del usa
 * @return boolean
 */
function esJefe($usaLogin){
	global $db;
	$salida=false;
	$sql="SELECT USUA_CODI,USUA_ESTA FROM USUARIO 
			WHERE  USUA_LOGIN='{$usaLogin}'";
	$rs= &$db->query($sql);
		if($rs&& !$rs->EOF){
			$salida = ($rs->fields["USUA_CODI"]==1) && ($rs->fields["USUA_ESTA"]==1);
		}
	return $salida;
}
/**
 * retorna el codigo de un usario dado su pk 
 *
 * @param String $usuaLogin pk del usuario 
 * @return int
 */
function getUsuaCodigo($usuaLogin){
	global $db;
	$salida=false;
	$sql="SELECT USUA_CODI FROM USUARIO 
			WHERE  USUA_LOGIN='{$usuaLogin}'";
	$rs= $db->query($sql);
		if($rs&& !$rs->EOF){
			$salida =($rs->fields["USUA_CODI"]);
	}
	return $salida;
	
}
/**
 * funcion que dado un codigo de usuario y la dependencia 
 * retorna el identificador del usuario es decir dada la clave 
 * candidata retorna la llave primaria
 *
 * @param int $usuaCodi codigo del usuario
 * @param int $dependencia dependencia del usuario
 * @return String
 */
function getUsuaLogin($usuaCodi,$dependencia){
	global $db;
	$salida=false;
	$sql="SELECT USUA_LOGIN FROM USUARIO 
			WHERE  USUA_CODI='{$usuaCodi}' AND DEPE_CODI={$dependencia}";
	$rs= $db->query($sql);
	if($rs && !$rs->EOF){
			$salida = ($rs->fields["USUA_CODI"]==1) && ($rs->fields["USUA_ESTA"]==1);
		}
	return $salida;
}
function getLoginTx($usCodDestino,$dependencia){
	global $db;
	$salida=false;
	$sql="SELECT USUA_LOGIN FROM USUARIO 
			WHERE  USUA_NOMB='{$usCodDestino}' AND DEPE_CODI={$dependencia}";
	$rs= $db->query($sql);
	if($rs && !$rs->EOF){
			$salida = $rs->fields["USUA_LOGIN"];
		}
	return $salida;
	
}
function getUsuaDoc($usaLogin){
	global $db;
	$salida=false;
	$sql="SELECT USUA_DOC FROM USUARIO 
			WHERE  USUA_LOGIN='{$usaLogin}'";
	$rs= $db->query($sql);
		if($rs&& !$rs->EOF){
			$salida =($rs->fields["USUA_DOC"]);
	}
	return $salida;
}
function getInfoUsuario($usuaLogin){
	global $db;
	$sql="SELECT USUA_DOC,DEPE_CODI,CODI_NIVEL,USUA_CODI,USUA_NOMB FROM USUARIO 
			WHERE  USUA_LOGIN='{$usuaLogin}'";
	$rs= $db->query($sql);
		if($rs&& !$rs->EOF){
			$salida['usua_doc'] =($rs->fields["USUA_DOC"]);
			$salida['usua_depe'] =($rs->fields["DEPE_CODI"]);
			$salida['usua_nivel'] =($rs->fields["CODI_NIVEL"]);
			$salida['usua_codi'] =($rs->fields["USUA_CODI"]);
			$salida['usua_nomb'] =($rs->fields["USUA_NOMB"]);
			
			
	}
	
	return $salida;
}

/**
 * **********************************************************************************************
 * Expedientes
 * **********************************************************************************************
 * 
 */
function estadoRadicadoExpediente($numRadicado,$numExpediente){
	global $db;
	$salida=-1;
	$consulta="SELECT SGD_EXP_ESTADO FROM SGD_EXP_EXPEDIENTE WHERE RADI_NUME_RADI={$numRadicado} AND SGD_EXP_NUMERO='{$numExpediente}'";
	$resultado=$db->query($consulta);
	if($resultado && !$resultado->EOF){
		$salida=$resultado->fields['SGD_EXP_ESTADO'];
	}
	return $salida;
}


function anexarExpediente($numRadicado,$numExpediente,$usuaLogin,$observa){
	global  $db;
	//$db->conn->debug=true;
	$usuaLogin=($usuaLogin=="manager")?"ADMON":$usuaLogin;
	
	$estado=estadoRadicadoExpediente($numRadicado,$numExpediente);
	$usua=getInfoUsuario($usuaLogin);
	$tipoTx = 53;
    $Historico = new Historico( $db );
    $fecha=$db->conn->OffsetDate(0,$db->conn->sysTimeStamp);
	//print $estado;
    switch ($estado){
		case 0:
			throw new Exception("el Documento {$numRadicado} ya fue Anexado al Expediente {$numExpediente}");
		case 1:
			throw new Exception("el Documento {$numRadicado} ya fue Anexado al Expediente {$numExpediente} y Archivado ");
		case 2: 
			$consulta="UPDATE SGD_EXP_EXPEDIENTE SET SGD_EXP_ESTADO=0,SGD_EXP_FECH={$fecha},USUA_CODI=".$usua['usua_codi'].",USUA_DOC='".$usua['usua_doc']."'
				,DEPE_CODI=".$usua['usua_depe']." WHERE RADI_NUME_RADI={$numRadicado} 
						AND SGD_EXP_NUMERO='{$numExpediente}'";
				break;
		default:
			$consulta="INSERT INTO SGD_EXP_EXPEDIENTE (SGD_EXP_NUMERO,RADI_NUME_RADI,SGD_EXP_FECH,SGD_EXP_ESTADO,USUA_CODI,USUA_DOC,DEPE_CODI)
					  VALUES ('{$numExpediente}',{$numRadicado},{$fecha},0,".$usua['usua_codi'].",'".$usua['usua_doc']."',".$usua['usua_depe'].")";
			break;
	}
	if($db->query($consulta)!==false){
		$radicados = array("radicado"=>$numRadicado);
		$Historico->insertarHistoricoExp( $numExpediente, $radicados, $usua['usua_depe'], $usua['usua_codi'], $observa, $tipoTx, 0);
		$salida="Anexado";
	}else{ 
	 	throw new Exception("Error y no se realizo la operacion ".$estado ." consulta ".$consulta);
	}
	return $salida;
}

function consultarProcesos($numExpediente,$dependencia){
	global $db;
	$salida="";
	$consulta="SELECT PROCESSINSTANCE FROM sgd_sexp_secexpedientes WHERE sgd_exp_numero='{$numExpediente}'";
	try{
		$rs=$db->query($consulta);
		$salida=$rs->fields['PROCESSINSTANCE'];
		
	}catch (Exception $e){
		throw $e;
	}
	
	return $salida;

}

/**
 * Retorna la cantidad de bytes de una expresion como 7M, 4G u 8K.
 *
 * @param char $var
 * @return numeric
 */
function return_bytes($val)
{	$val = trim($val);
	$ultimo = strtolower($val{strlen($val)-1});
	switch($ultimo)
	{	// El modificador 'G' se encuentra disponible desde PHP 5.1.0
		case 'g':	$val *= 1024;
		case 'm':	$val *= 1024;
		case 'k':	$val *= 1024;
	}
	return $val;
}


?>